package com.priox.sigar.jsf;

import com.mm.support.mapper.DTOMapperService;
import com.priox.sigar.application.mappers.GrupoEmpresarialMapper;
import com.priox.sigar.application.mappers.SociedadMapper;
import com.priox.sigar.application.sociedad.RegistroSociedadApp;
import com.priox.sigar.client.dto.GrupoEmpresarialDTO;
import com.priox.sigar.client.dto.SociedadDTO;
import com.priox.sigar.client.flt.SociedadFlt;
import com.priox.sigar.domain.model.Sociedad;
import com.priox.sigar.jsf.util.FindCrudBeanBase;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.event.CloseEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;


@ManagedBean
@Scope("session")
@Component
public class MaestroSociedadJsfBean extends FindCrudBeanBase {

    SociedadFlt filtroBusqueda;
    SociedadDTO nuevoRegistro;
    List<SociedadDTO> registros = new ArrayList<SociedadDTO>();


    List<GrupoEmpresarialDTO> cmbGrupoEmpresarial;

    @Autowired
    SociedadMapper sociedadMapper;

    @Autowired
    DTOMapperService mapperService;

    @Autowired
    RegistroSociedadApp registroSociedadApp;


    @Autowired
    GrupoEmpresarialMapper grupoEmpresarialMapper;



    @PostConstruct
    public void init() {
        filtroBusqueda = new SociedadFlt();
        nuevoRegistro= new SociedadDTO();
        cmbGrupoEmpresarial = grupoEmpresarialMapper.findAll();
        findRegistros();
    }

    /*Métodos de herencia*/

    @Override
    public void setCursorTableNull() {

    }

    @Override
    public void onNewRecord(ActionEvent actionEvent) {
        setUpdateMode(false);
        nuevoRegistro = new SociedadDTO();
        InputText inputText=(InputText)findComponent("inputCodigo");
        inputText.setDisabled(false);
    }
    @Override
    public void onShowEditDialog(ActionEvent actionEvent) {
        setUpdateMode(true);
        setPersistMode(true);
        nuevoRegistro=registroSociedadApp.findById(nuevoRegistro.getSociedadId());
        InputText inputText=(InputText)findComponent("inputCodigo");
        inputText.setDisabled(true);

    }

    @Override
    public void onFind(ActionEvent actionEvent) {
        findRegistros();
    }

    public void findRegistros() {

        registros = sociedadMapper.findByFilter(filtroBusqueda);
        if (registros.size() == 0) {
            addMessage(noRecordFoundMsg, FacesMessage.SEVERITY_INFO);
        }
    }

    @Override
    public void onClean(ActionEvent actionEvent) {
        registros = new ArrayList<SociedadDTO>();
        nuevoRegistro= new SociedadDTO();
        filtroBusqueda = new SociedadFlt();
    }

    @Override
    public void onPersist(ActionEvent actionEvent) {
        Sociedad sociedad = mapperService.map(nuevoRegistro,Sociedad.class);
        registroSociedadApp.save(sociedad ,updateMode);
    }

    @Override
    public void onDelete(ActionEvent actionEvent) {
        Sociedad sociedad = mapperService.map(nuevoRegistro,Sociedad.class);
        registroSociedadApp.delete(sociedad);
    }

    @Override
    protected void onDialogClose(CloseEvent event) {
        nuevoRegistro = new SociedadDTO();
    }




    /*Getters and Setters*/

    public SociedadFlt getFiltroBusqueda() {
        return filtroBusqueda;
    }

    public void setFiltroBusqueda(SociedadFlt filtroBusqueda) {
        this.filtroBusqueda = filtroBusqueda;
    }

    public SociedadDTO getNuevoRegistro() {
        return nuevoRegistro;
    }

    public void setNuevoRegistro(SociedadDTO nuevoRegistro) {
        this.nuevoRegistro = nuevoRegistro;
    }

    public List<SociedadDTO> getRegistros() {
        return registros;
    }

    public void setRegistros(List<SociedadDTO> registros) {
        this.registros = registros;
    }

    public List<GrupoEmpresarialDTO> getCmbGrupoEmpresarial() {
        return cmbGrupoEmpresarial;
    }

    public void setCmbGrupoEmpresarial(List<GrupoEmpresarialDTO> cmbGrupoEmpresarial) {
        this.cmbGrupoEmpresarial = cmbGrupoEmpresarial;
    }
}
